package delphorm.web.validateur;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import delphorm.entite.questionnaire.Question;





public class AjouterQuestionSessionValidateur implements Validator {

	public boolean supports(Class classe) {
		
		return classe.isAssignableFrom(Question.class);
	}

	public void validate(Object obj, Errors errors) {
		Question questionCourante = (Question) obj;
//		verification de l'intitule
		String intitule = questionCourante.getIntitule();
		if(intitule == null || intitule.trim().length() == 0) //obligatoire
		{
			errors.rejectValue("intitule","ajouterQuestion.intitule.necessaire");
		}
		else if(intitule.trim().length() < 2 || intitule.trim().length() >=200 ) //au moins deux caractères
		{
			errors.rejectValue("intitule","ajouterQuestion.intitule.mauvais");
		}
		
		
		//verification des réponses min/max
		//verification que le minReponses et maxReponses ne sont pas nuls
		boolean continuer=true;
		if(questionCourante.getMinReponses()==null )
		{
			errors.rejectValue("minReponses","ajouterQuestion.minReponses.null");
			continuer=false;
		}
		if(questionCourante.getMaxReponses()==null )
		{
			errors.rejectValue("maxReponses","ajouterQuestion.maxReponses.null");
			continuer=false;
		}
		
		if(continuer == true)
		{
			//verif si maxReponse > minReponse
			if(questionCourante.getMinReponses().compareTo(questionCourante.getMaxReponses()) > 0 )
			{
				errors.rejectValue("maxReponses","ajouterQuestion.maxReponses.troppetit");
			}
			
			
			//verification que le nombre minimum est positif
			if(questionCourante.getMinReponses().compareTo(new Integer(0)) < 0)
			{
				errors.rejectValue("minReponses","ajouterQuestion.minReponses.positif");
			}
			//verification que le nombre maximum est supérieur ou égal à 1
			if(questionCourante.getMaxReponses().compareTo(new Integer(0)) < 1)
			{
				errors.rejectValue("maxReponses","ajouterQuestion.maxReponses.positif");
			}
			
			
			//ils doivent être plus petit que 32000 à cause de la base de donnée
			//avec postgres un smallint va jusqu'à 32000
			//mais 32000 réponses à une question c'est déjà pas mal!!
			if(questionCourante.getMinReponses().compareTo(new Integer(32000)) >= 0)
			{
				errors.rejectValue("minReponses","ajouterQuestion.minReponses.tropgrand");
			}
			if(questionCourante.getMaxReponses().compareTo(new Integer(32000)) >= 0)
			{
				errors.rejectValue("maxReponses","ajouterQuestion.maxReponses.tropgrand");
			}
		}
		
	}

}
